package com.ncmmall.domain.business.order.aftersale;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ncmmall.domain.business.order.Order;
import com.ncmmall.domain.business.order.dto.OrderDTO;
import com.ncmmall.domain.security.user.WebUser;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * 售后订单
 *
 * @author linxs
 * @date 2019-07-22 20:57
 */
@Entity
@Table(name = "mall_order_after_sale")
@Access(AccessType.FIELD)
@Getter
@Setter
public class OrderAfterSale {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    /**
     * 所属订单
     */
    @OneToOne
    private Order order;

    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "after_sale_order_id")
    private List<OrderAfterSaleDetail> details;

    /**
     * 售后原因
     */
    private String afterSaleReason;

    /**
     * 申请说明
     */
    private String note;

    /**
     * 所属会员
     */
    @JsonIgnore
    @OneToOne
    private WebUser member;

    /**
     * 所属商家
     */
    @JsonIgnore
    @OneToOne
    private WebUser merchant;

    /**
     * 申请时间
     */
    private Timestamp createTime;

    /**
     * 退款状态
     * 1、申请中
     * 2、退款成功
     * 3、退款失败
     */
    private int status;

    /**
     * 申请售后时订单状态
     */
    private int applyOfOrderStatus;

    /**
     * 售后状态
     * 1、申请中
     * 2、审核通过（待买家寄回）
     * 3、审核不通过
     * 4、买家寄回（待商家签收）
     * 5、商家已签收
     * 6、已完成（退款）
     * 7、商家拒绝退款
     */
    private int checkStatus;

    /**
     * 售后图片
     */
    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "orderAfterSaleId")
    private List<OrderAfterSaleImage> images;

    /**
     * 售后收货人
     */
    private String consignee;

    /**
     * 售后联系电话
     */
    private String consigneeMobile;

    /**
     * 售后地址
     */
    private String consigneeAddress;

    /**
     * 物流公司
     */
    private String expressCompany;

    /**
     * 物流单号
     */
    private String expressNo;

    /**
     * 微信退款refund_id
     */
    private String wechatRefundId;

    /**
     * 商户退款单号,请求退款必填参数
     * 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     */
    private String outRefundNo;

    /**
     * 退款时间
     */
    private Timestamp refundTime;

    /**
     * 退款金额
     */
    private double refundPrice;

    /**
     * 审核不通过的原因
     */
    private String reason;

    @Transient
    private String beginTime;

    @Transient
    private String endTime;

    @Transient
    private List<OrderDTO> orderDetails = new ArrayList<>();

}
